package demo.huodongbaoming.client;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * 校园活动报名服务客户端接口
 * 用于调用校园活动报名服务的API
 * name属性指定服务名称，fallback指定服务降级实现类
 */
@FeignClient(name = "activity-service", fallback = CampusActivityClientFallback.class)
public interface CampusActivityClient {
    
    /**
     * 获取所有校园活动
     * @return 活动列表
     */
    @GetMapping("/api/activities")
    List<Map<String, Object>> getAllActivities();
    
    /**
     * 获取特定活动详情
     * @param id 活动ID
     * @return 活动详情
     */
    @GetMapping("/api/activities/{id}")
    Map<String, Object> getActivityById(@PathVariable("id") Long id);
    
    /**
     * 获取用户报名的活动
     * @param userId 用户ID
     * @return 活动列表
     */
    @GetMapping("/api/activities/user/{userId}")
    List<Map<String, Object>> getActivitiesByUser(@PathVariable("userId") Long userId);
    
    /**
     * 获取特定类别的活动
     * @param categoryId 类别ID
     * @return 活动列表
     */
    @GetMapping("/api/activities/category/{categoryId}")
    List<Map<String, Object>> getActivitiesByCategory(@PathVariable("categoryId") Long categoryId);
    
    /**
     * 报名参加活动
     * @param activityId 活动ID
     * @param userId 用户ID
     * @return 报名结果
     */
    @PostMapping("/api/activities/{activityId}/register")
    Map<String, Object> registerForActivity(@PathVariable("activityId") Long activityId, @RequestParam("userId") Long userId);
    
    /**
     * 取消活动报名
     * @param activityId 活动ID
     * @param userId 用户ID
     * @return 取消结果
     */
    @DeleteMapping("/api/activities/{activityId}/register")
    Map<String, Object> cancelRegistration(@PathVariable("activityId") Long activityId, @RequestParam("userId") Long userId);
    
    /**
     * 创建新活动
     * @param activity 活动信息
     * @return 创建结果
     */
    @PostMapping("/api/activities")
    Map<String, Object> createActivity(@RequestBody Map<String, Object> activity);
    
    /**
     * 更新活动信息
     * @param id 活动ID
     * @param activity 活动信息
     * @return 更新结果
     */
    @PutMapping("/api/activities/{id}")
    Map<String, Object> updateActivity(@PathVariable("id") Long id, @RequestBody Map<String, Object> activity);
    
    /**
     * 获取活动类别列表
     * @return 类别列表
     */
    @GetMapping("/api/activities/categories")
    List<Map<String, Object>> getActivityCategories();
    
    /**
     * 获取服务健康状态
     * @return 健康状态信息
     */
    @GetMapping("/actuator/health")
    Map<String, Object> getHealthStatus();
} 